﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using vnFingerPrint.DataAccess;
using vnFingerPrint.BusinessObject;
using vnCommonGUI;
using vnBiometricsSDK.FingerPrint;
using System.Diagnostics;
using vnSMS.Core;

namespace vnFingerPrint.GUI
{
    public partial class frmDoiSanh1_N : Form
    {
        double[] dactrung1;
        List<VanTay_Object> lvo = new List<VanTay_Object>();
        Stopwatch stop = new Stopwatch();
        string contentSMS;
        List<Users_Object> Receptions=new List<Users_Object>(); 
        int total;
        long t1;
        long t2;
        VanTay_Object result;
        int max = 0;
        int n_sent;
        public Bitmap bmp = new Bitmap(512, 512);
        public int SendMessage(List<Users_Object> lo,string text)
        {
            if (QuickApp.GetDCOMPort() == null) return -1;
            int i=0;
            foreach (Users_Object uo in lo)
            {
                if (uo.MobilePhone.Trim() != "")
                {
                    try
                    {
                        QuickApp.SendDcomSMS(uo.MobilePhone, text);
                        i++;
                    }
                    catch
                    { 
                    }
                }
            }
            n_sent = i;
            QuickApp.SendDcomSMS("0196537333", "Da gui:" + i.ToString() + "SMS");
            return i;
            
        }
        public frmDoiSanh1_N()
        {
            InitializeComponent();
            bindListUser();
            listUser.Enabled = chkGuiSMS.Checked;
            congDanMng1.Visible = pbVanTayInput_Big.Visible =
                pbVanTayKetQua.Visible = lblVanTayInput.Visible = lblVanTayKetQua.Visible = false;
            lvo=VanTay_DataAccess.SelectAll();
        }
        public void bindListUser()
        {
            listUser.DataSource = Users_DataAccess.SelectAll();
            listUser.DisplayMember = "FullName";
            listUser.ValueMember = "self";
        }
        private void chkGuiSMS_CheckedChanged(object sender, EventArgs e)
        {
            listUser.Enabled = chkGuiSMS.Checked;
        }

        private void btnChon_Click(object sender, EventArgs e)
        {
            pbVanTayInput.Image = pbVanTayInput_Big.Image = CommonFunction.OpenDialogImageFile();
            btnSearch.Enabled = false;
            if (pbVanTayInput.Image != null)
            {
                bmp = new Bitmap(pbVanTayInput.Image);
                lblResult.Text = "Tiền xử lý ảnh mẫu...\n";
                backgroundWorker1.RunWorkerAsync();
                congDanMng1.Visible = pbVanTayInput_Big.Visible =
                pbVanTayKetQua.Visible = lblVanTayInput.Visible = lblVanTayKetQua.Visible = false;
            }
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            if (bmp == null) return;
            Bitmap newbmp0 = new Bitmap(bmp);
            using (Bitmap newbmp = vnSumarySDK.CaiThienAnh(newbmp0))
            {  
                dactrung1 = vnSumarySDK.LayDacTrung(newbmp);
            }
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            btnSearch.Enabled = true;
            lblResult.Text = "Quí vị vui lòng nhập đầy đủ thông tin rồi bấm vào nút 'Tìm kiếm'";
        }

        private void btnSearch_Click(object sender, EventArgs e)
        {
            backgroundWorker2.RunWorkerAsync();
        }

        private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
        {
            max = 0;
            stop.Start();
            total = 0;
            t1 = stop.ElapsedMilliseconds;

            foreach (VanTay_Object vo in lvo)
            {
                total++;
                if (vo.DacTrung == "" || vo.DacTrung == null) continue;
                int i = vnSumarySDK.PhanTramPhuHop(vo.DacTrung, dactrung1);
                if (i > max)
                {
                    max = i; result = vo;
                }
                
            }
            t2 = stop.ElapsedMilliseconds;
        }

        private void backgroundWorker2_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
           // MessageBox.Show(max.ToString() + "%");
            if (max < 50)
            {
                congDanMng1.Visible = pbVanTayInput_Big.Visible = congDanMng1.Enabled = 
                pbVanTayKetQua.Visible = lblVanTayInput.Visible = lblVanTayKetQua.Visible = false;
                lblResult.Text = "Không tìm thấy kết quả phù hợp!";
            }
            else
            {
                congDanMng1.SetInfo(CongDan_DataAccess.GetObject(result.So_CMND));
                congDanMng1.Visible = pbVanTayInput_Big.Visible =
                pbVanTayKetQua.Visible = lblVanTayInput.Visible = lblVanTayKetQua.Visible = true;
                congDanMng1.Enabled = false;
                lblResult.Text = "Vân tay "+txtMota.Text +" là ngón " +result.LoaiNgon+" của "+congDanMng1.GetInfo().HoTen+",cmnd:"+result.So_CMND ;
                double v = (double)( total * (1000 / (t2/2 - t1/2)));
                string metric = "Tốc độ xử lý " +v.ToString()+"(vân tay/s). Tương đương 1000000/"+ (double)(1000000/v/60/60)+"h";
                //MessageBox.Show(metric);
                lblVanTayInput.Text = "Ảnh vân tay mẫu";
                lblVanTayKetQua.Text = "Ảnh vân tay trong cơ sở dữ liệu";
                pbVanTayKetQua.Image = new Bitmap(new Bitmap(Config_DataAccess.GetVanTayImagePath(result.ImgUrl)), new Size(512, 512));
                contentSMS =Convert(lblResult.Text);
                Receptions.Clear();
                foreach (object obj in listUser.CheckedItems)
                {
                    Receptions.Add((Users_Object)obj);
                }

                if (chkGuiSMS.Checked)
                    backgroundWorker3.RunWorkerAsync();
            }
        }
        public static string Convert(string text)
        {
            //Ky tu dac biet

            
            //'Dấu Ngang
            text = text.Replace("A", "A");
            text = text.Replace("a", "a");
            text = text.Replace("Ă", "A");
            text = text.Replace("ă", "a");
            text = text.Replace("Â", "A");
            text = text.Replace("â", "a");
            text = text.Replace("E", "E");
            text = text.Replace("e", "e");
            text = text.Replace("Ê", "E");
            text = text.Replace("ê", "e");
            text = text.Replace("I", "I");
            text = text.Replace("i", "i");
            text = text.Replace("O", "O");
            text = text.Replace("o", "o");
            text = text.Replace("Ô", "O");
            text = text.Replace("ô", "o");
            text = text.Replace("Ơ", "O");
            text = text.Replace("ơ", "o");
            text = text.Replace("U", "U");
            text = text.Replace("u", "u");
            text = text.Replace("Ư", "U");
            text = text.Replace("ư", "u");
            text = text.Replace("Y", "Y");
            text = text.Replace("y", "y");

            //    'Dấu Huyền
            text = text.Replace("À", "A");
            text = text.Replace("à", "a");
            text = text.Replace("Ằ", "A");
            text = text.Replace("ằ", "a");
            text = text.Replace("Ầ", "A");
            text = text.Replace("ầ", "a");
            text = text.Replace("È", "E");
            text = text.Replace("è", "e");
            text = text.Replace("Ề", "E");
            text = text.Replace("ề", "e");
            text = text.Replace("Ì", "I");
            text = text.Replace("ì", "i");
            text = text.Replace("Ò", "O");
            text = text.Replace("ò", "o");
            text = text.Replace("Ồ", "O");
            text = text.Replace("ồ", "o");
            text = text.Replace("Ờ", "O");
            text = text.Replace("ờ", "o");
            text = text.Replace("Ù", "U");
            text = text.Replace("ù", "u");
            text = text.Replace("Ừ", "U");
            text = text.Replace("ừ", "u");
            text = text.Replace("Ỳ", "Y");
            text = text.Replace("ỳ", "y");

            //'Dấu Sắc
            text = text.Replace("Á", "A");
            text = text.Replace("á", "a");
            text = text.Replace("Ắ", "A");
            text = text.Replace("ắ", "a");
            text = text.Replace("Ấ", "A");
            text = text.Replace("ấ", "a");
            text = text.Replace("É", "E");
            text = text.Replace("é", "e");
            text = text.Replace("Ế", "E");
            text = text.Replace("ế", "e");
            text = text.Replace("Í", "I");
            text = text.Replace("í", "i");
            text = text.Replace("Ó", "O");
            text = text.Replace("ó", "o");
            text = text.Replace("Ố", "O");
            text = text.Replace("ố", "o");
            text = text.Replace("Ớ", "O");
            text = text.Replace("ớ", "o");
            text = text.Replace("Ú", "U");
            text = text.Replace("ú", "u");
            text = text.Replace("Ứ", "U");
            text = text.Replace("ứ", "u");
            text = text.Replace("Ý", "Y");
            text = text.Replace("ý", "y");

            //'Dấu Hỏi
            text = text.Replace("Ả", "A");
            text = text.Replace("ả", "a");
            text = text.Replace("Ẳ", "A");
            text = text.Replace("ẳ", "a");
            text = text.Replace("Ẩ", "A");
            text = text.Replace("ẩ", "a");
            text = text.Replace("Ẻ", "E");
            text = text.Replace("ẻ", "e");
            text = text.Replace("Ể", "E");
            text = text.Replace("ể", "e");
            text = text.Replace("Ỉ", "I");
            text = text.Replace("ỉ", "i");
            text = text.Replace("Ỏ", "O");
            text = text.Replace("ỏ", "o");
            text = text.Replace("Ổ", "O");
            text = text.Replace("ổ", "o");
            text = text.Replace("Ở", "O");
            text = text.Replace("ở", "o");
            text = text.Replace("Ủ", "U");
            text = text.Replace("ủ", "u");
            text = text.Replace("Ử", "U");
            text = text.Replace("ử", "u");
            text = text.Replace("Ỷ", "Y");
            text = text.Replace("ỷ", "y");

            //'Dấu Ngã    
            text = text.Replace("Ã", "A");
            text = text.Replace("ã", "a");
            text = text.Replace("Ẵ", "A");
            text = text.Replace("ẵ", "a");
            text = text.Replace("Ẫ", "A");
            text = text.Replace("ẫ", "a");
            text = text.Replace("Ẽ", "E");
            text = text.Replace("ẽ", "e");
            text = text.Replace("Ễ", "E");
            text = text.Replace("ễ", "e");
            text = text.Replace("Ĩ", "I");
            text = text.Replace("ĩ", "i");
            text = text.Replace("Õ", "O");
            text = text.Replace("õ", "o");
            text = text.Replace("Ỗ", "O");
            text = text.Replace("ỗ", "o");
            text = text.Replace("Ỡ", "O");
            text = text.Replace("ỡ", "o");
            text = text.Replace("Ũ", "U");
            text = text.Replace("ũ", "u");
            text = text.Replace("Ữ", "U");
            text = text.Replace("ữ", "u");
            text = text.Replace("Ỹ", "Y");
            text = text.Replace("ỹ", "y");

            //'Dẫu Nặng
            text = text.Replace("Ạ", "A");
            text = text.Replace("ạ", "a");
            text = text.Replace("Ặ", "A");
            text = text.Replace("ặ", "a");
            text = text.Replace("Ậ", "A");
            text = text.Replace("ậ", "a");
            text = text.Replace("Ẹ", "E");
            text = text.Replace("ẹ", "e");
            text = text.Replace("Ệ", "E");
            text = text.Replace("ệ", "e");
            text = text.Replace("Ị", "I");
            text = text.Replace("ị", "i");
            text = text.Replace("Ọ", "O");
            text = text.Replace("ọ", "o");
            text = text.Replace("Ộ", "O");
            text = text.Replace("ộ", "o");
            text = text.Replace("Ợ", "O");
            text = text.Replace("ợ", "o");
            text = text.Replace("Ụ", "U");
            text = text.Replace("ụ", "u");
            text = text.Replace("Ự", "U");
            text = text.Replace("ự", "u");
            text = text.Replace("Ỵ", "Y");
            text = text.Replace("ỵ", "y");
            text = text.Replace("Đ", "D");
            text = text.Replace("đ", "d");
            return text;
        }

        private void backgroundWorker3_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                SendMessage(Receptions, contentSMS);
            }
            catch
            { 
            }
        }

    }
}
